package basic.study.wantOffer.chapter6;

/**
 * @ClassName Problem65
 * @Description 不用加减乘除做加法(也就是只能用位运算)
 * @Company inspur
 * @Author Kevin
 * @Date 2020/6/15 10:58
 * @Version 1.0
 */
public class Problem65 {
    /**
     * 思路
     * 　　对数字做运算，除了四则运算外，只剩下位运算了。根据一般情况下的加法步骤，设计如下：
     *
     * 　　1）不考虑进位对每一位相加：1加0，0加1都等于1，而0加0，1加1等于0，所以使用异或^操作；
     *
     * 　　2）计算进位：只有1加1产生进位，所以采用位与&操作，再左移1位；
     *
     * 　　3）将和与进位相加，即重复前两步操作。结束判断为进位为0。
     */
    public int add(int num1, int num2) {
        while (num2 != 0) {
            int sum = num1 ^ num2;//没进位的和
            int carry = (num1 & num2) << 1;//进位
            num1 = sum;
            num2 = carry;
        }
        return num1;
    }
}
